package com.code.qgjx.mapper;

import com.code.qgjx.entity.WorkPush;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

@Mapper
public interface WorkPushMapper {
    
    // 插入工作推送信息
    int insert(WorkPush workPush);
    
    // 删除工作推送
    int deleteById(@Param("id") Long id);
    
    // 更新工作推送
    int update(WorkPush workPush);
    
    // 根据ID查询
    Map<String, Object> selectById(@Param("id") Long id);
    
    // 根据年份和学期查询
    List<Map<String, Object>> selectByYearAndSemester(@Param("year") String year, @Param("semester") String semester);
    
    // 根据科室名称查询
    List<Map<String, Object>> selectByDepartment(@Param("departmentName") String departmentName);
    
    // 根据状态查询
    List<Map<String, Object>> selectByState(@Param("state") Integer state);
    
    // 查询所有（分页）
    List<Map<String, Object>> selectAllWithPage(@Param("start") Integer start, @Param("limit") Integer limit, @Param("userId") String userId, @Param("status") String status);
    
    // 根据年份和学期查询（分页）
    List<Map<String, Object>> selectByYearAndSemesterWithPage(@Param("year") String year, @Param("semester") String semester,
                                                  @Param("start") Integer start, @Param("limit") Integer limit, @Param("userId") String userId);
    
    // 根据科室名称查询（分页）
    List<Map<String, Object>> selectByDepartmentWithPage(@Param("departmentName") String departmentName,
                                            @Param("start") Integer start, @Param("limit") Integer limit, @Param("userId") String userId);
    
    // 根据状态查询（分页）
    List<Map<String, Object>> selectByStateWithPage(@Param("state") Integer state,
                                       @Param("start") Integer start, @Param("limit") Integer limit, @Param("userId") String userId);
    
    // 查询总数
    int selectCount(@Param("userId") String userId);
    
    // 根据年份和学期查询总数
    int selectCountByYearAndSemester(@Param("year") String year, @Param("semester") String semester, @Param("userId") String userId);
    
    // 根据科室名称查询总数
    int selectCountByDepartment(@Param("departmentName") String departmentName, @Param("userId") String userId);
    
    // 根据状态查询总数
    int selectCountByState(@Param("state") Integer state, @Param("userId") String userId);
    
    // 查询所有
    List<Map<String, Object>> selectAll();
    
    // 根据条件搜索工作推送（分页）
    List<Map<String, Object>> searchWorkPush(@Param("workPush") WorkPush workPush, @Param("start") Integer start, @Param("limit") Integer limit);
    
    // 根据条件获取工作推送总数
    int getSearchWorkPushCount(@Param("workPush") WorkPush workPush);
    
    // 检查同月是否已有记录
    Map<String, Object> checkExistingInMonth(@Param("year") String year, 
                                 @Param("month") String month, 
                                 @Param("userId") String userId,
                                 @Param("excludeId") Long excludeId);
} 